package ar.com.cubika.trainees.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Set;

import ar.com.cubika.trainees.bean.transportes.Ruta;
import ar.com.cubika.trainees.bean.transportes.actividades.Viaje;
import ar.com.cubika.trainees.bean.transportes.vehiculos.Vehiculo;
import ar.com.cubika.trainees.date.DateUtils;

public class ViajeDAO extends AbstractMySQLDAO {

	// Singleton
	private static ViajeDAO instance = new ViajeDAO();

	private ViajeDAO() {
	}

	public static ViajeDAO getInstance() {
		return instance;
	}

	public List<Viaje> getViajes(String patente) {

		List<Viaje> viajes = new ArrayList<Viaje>();

		try {

			Statement stmt = getNewStatement();
			String query = "SELECT * FROM VIAJE WHERE PATENTE='" + patente + "';";
			ResultSet rs = stmt.executeQuery(query);

			while (rs.next()) {

				int ruta = rs.getInt("RUTA");
				int carga = rs.getInt("CARGA");
				int tiempoMax = rs.getInt("TIEMPOMAX");
				Date fechaPartida = rs.getDate("FECHAPARTIDA");
				String patenteVehiculo = rs.getString("PATENTE");
				String nombreChofer = rs.getString("CHOFER");
				
				Vehiculo veh = VehiculoDAO.getInstance().getVehiculo(patenteVehiculo);
				Ruta r = RutaDAO.getInstance().getRuta(ruta);
				
				Viaje viaje = new Viaje(r,carga,tiempoMax);
				viaje.setCarga(carga);
				viaje.setChofer(nombreChofer);
				viaje.setFechaPartida(fechaPartida);
				viaje.setVehiculo(veh);
				
				viajes.add(viaje);
				
				
			}
			stmt.close();

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return viajes;
	}

	public void putViaje(Viaje viaje) {
		
		
		try {
			Statement stmt = getNewStatement();
			
			String patente = viaje.getVehiculo().getPatente();
			int ruta = RutaDAO.getInstance().getId(viaje.getRuta());
			int carga = (int) viaje.getCarga();
			int tiempoMax = (int) viaje.getTiempoMaximo();
			Date fechaPartida = viaje.getFechaPartida();
			String fechaString = convertDate(fechaPartida);
			String nombreChofer = viaje.getChofer();
			String query = "INSERT INTO VIAJE (PATENTE,RUTA,CARGA,TIEMPOMAX,FECHAPARTIDA,CHOFER) VALUES" +
					"('"+patente+"',"+ruta+","+carga+","+tiempoMax+","+fechaString+",'"+nombreChofer+"')";
			stmt.executeUpdate(query);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		/*
		PATENTE			VARCHAR(7) NOT NULL,
		FOREIGN KEY (PATENTE) REFERENCES VEHICULOS(PATENTE),
		RUTA   			INT		        NOT NULL,
		CARGA			INT		 		NOT NULL,         
		TIEMPOMAX		INT				NOT NULL,
		FECHAPARTIDA	DATE			NOT NULL,
		CHOFER			VARCHAR(50)		NOT NULL	
		 */
		
	}
	
	private String convertDate(Date date) {

		// STR_TO_DATE('01/05/2010','%d/%m/%Y')
		StringBuilder result = new StringBuilder("STR_TO_DATE('");
		result.append(DateUtils.formatDate(date));
		result.append("','%d/%m/%Y')");
		return result.toString();
	}

}
